FB - journal
Otázka od: Jaroslav Uher
17. 5. 2004 17:42
Ahoj,
potrebuji resit monitorovani zmen v jednotlivych polich tabulek a
chci to na serveru pomoci triggeru, coz mi pripada nejbezpecnejsi.
V historii konference ale i na Intenetu jsem nic nenasel.
Vytvoril jsem si tabulku (domeny nejsou dulezite)
CREATE TABLE MYJOURNAL
(
ID DM_ID,
DATUM DM_USER_TIMESTAMP,
TABULKA VARCHAR(30), /* nebude s diakritikou */
POLE VARCHAR(30), /* nebude s diakritikou */
REC_KOD VARCHAR(10), /* nebude s diakritikou */
OLD_VALUE VARCHAR(100) CHARACTER SET WIN1250,
NEW_VALUE VARCHAR(100) CHARACTER SET WIN1250,
STRED DM_SI0,
LAST_USER DM_USER_KOD,
PRIMARY KEY (ID)
);
k ni proceduru
SET TERM !! ;
CREATE PROCEDURE INSERT_INTO_MYJOURNAL(
/** Procedure vlozi nove hodnoty do tabulky MYJOURNAL **/
I_TABULKA VARCHAR(30), /* nebude s diakritikou */
I_POLE VARCHAR(30), /* nebude s diakritikou */
I_REC_KOD VARCHAR(10), /* nebude s diakritikou */
I_OLD_VALUE VARCHAR(100) CHARACTER SET WIN1250,
I_NEW_VALUE VARCHAR(100) CHARACTER SET WIN1250,
I_STRED SMALLINT,
I_LAST_USER CHAR(6))
AS
BEGIN
INSERT INTO MYJOURNAL
(DATUM,TABULKA,POLE,REC_KOD,OLD_VALUE,NEW_VALUE,STRED,LAST_USER)
VALUES
('NOW',:I_TABULKA,:I_POLE,:I_REC_KOD,:I_OLD_VALUE,:I_NEW_VALUE,:I_STRE
D,:I_LAST_USER);
END !!
SET TERM ; !!
a v kazde tabulce, kde chci monitorovat zmeny poli
Mam triggeer, napr:
/** TRIGGER AFTER UPDATE **/
SET TERM !! ;
CREATE TRIGGER T_CIS_OBLASTI_JOURNAL FOR CIS_OBLASTI
ACTIVE AFTER UPDATE POSITION 0
AS
DECLARE VARIABLE TBL VARCHAR(30);
BEGIN
/* do tabulky MYJOURNAL zapisujeme zmenene hodnoty techto poli
OBLAST_KOD DM_ID ,
NAZEV VARCHAR(25) CHARACTER SET WIN1250,
*/
TBL = 'CIS_OBLASTI';
IF (OLD.OBLAST_KOD <> NEW.OBLAST_KOD) THEN
EXECUTE PROCEDURE INSERT_INTO_MYJOURNAL(TBL,'OBLAST_KOD',NEW.KOD,
CAST(OLD.OBLAST_KOD AS
VARCHAR(10)), /* pretypujeme na VARCHAR */
CAST(NEW.OBLAST_KOD AS
VARCHAR(10)),NEW.STRED,NEW.LAST_USER);
IF (OLD.NAZEV <> NEW.NAZEV) THEN
EXECUTE PROCEDURE
INSERT_INTO_MYJOURNAL(TBL,'NAZEV',NEW.KOD,OLD.NAZEV,NEW.NAZEV,NEW.STRE
D,NEW.LAST_USER);
END !!
SET TERM ; !!
ale, uprime <je to pakarna>, samozrejme si na to vytvorim vlastni
generator, jinak bych se 'upsal'
Pokud ma nekdo lepsi reseni a muze ho nabidnout, prosim ... (a dekuji
!)
Jarek Uher
Odpovedá: Pavel Cisar
19. 5. 2004 20:51
Haj hou!
On 17 May 2004 at 18:21, Jaroslav Uher wrote:
> potrebuji resit monitorovani zmen v jednotlivych polich tabulek a
> chci to na serveru pomoci triggeru, coz mi pripada nejbezpecnejsi.
> V historii konference ale i na Intenetu jsem nic nenasel.
Na tohle existuje docela pekny program IBLogManager (komercni), k
videni na webu IBPhoenix.
S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase
Odpovedá: Jaroslav Uher
20. 5. 2004 11:58
Ahoj,
On 19 May 2004 at 21:31, Pavel Cisar wrote:
> > potrebuji resit monitorovani zmen v jednotlivych polich tabulek a
> > chci to na serveru pomoci triggeru, coz mi pripada nejbezpecnejsi. V
> > historii konference ale i na Intenetu jsem nic nenasel.
>
> Na tohle existuje docela pekny program IBLogManager (komercni), k
> videni na webu IBPhoenix.
ten ja znam, ja to potrebuji v nasi aplikaci a do nasi databaze.
To me reseni je dostacujici nasim potrebam.
BTW, inspiraci jsem nasel v Tve knizce, diky
Jde mi spise o zjednoduseni toho trigeru
DECLARE VARIABLE TBL VARCHAR(30);
BEGIN
TBL = 'CIS_ICO'; /*zjistit vlastnika (tabulku) trigeru */
IF (OLD.ICO <> NEW.ICO) THEN /* popripade priradit objekt do
promenne, */
EXECUTE PROCEDURE
INSERT_INTO_MYJOURNAL(TBL,'ICO',NEW.KOD,OLD.ICO,NEW.ICO);
END
Dekuji za pripadne namety,
Jarek Uher